const mongoose = require("mongoose");

//设置 strictQuery 为 true
mongoose.set("strictQuery", true);

// 连接 mongodb 服务                        数据库的名称
mongoose.connect("mongodb://127.0.0.1:27017/bilibili");

//设置回调
// 设置连接成功的回调  once 一次   事件回调函数只执行一次
mongoose.connection.once("open", () => {
  // 创建文档的结构对象
  //设置集合中文档的属性以及属性值的类型
  let BookSchema = new mongoose.Schema({
    name: String,
    author: String,
    price: Number,
    is_hot: Boolean,
  });

  // 创建模型对象  对文档操作的封装对象  mongoose 会自动将集合名变为负数形式
  let BookModel = mongoose.model("novel", BookSchema);

  // 将价格小于20的数据查询出来
  /*   BookModel.find({ price: { $lt: 20 } })
    .then((data) => {
      console.log("查询成功", data);
    })
    .catch((err) => {
      console.log("查询失败", err);
    }); */

  // 查询 曹雪芹或余华 的书
  /*   BookModel.find({ $or: [{ author: "曹雪芹" }, { author: "余华" }] })
    .then((data) => {
      console.log("查询成功", data);
    })
    .catch((err) => {
      console.log("查询失败", err);
    }); */

  // 查询 价格大于30且小于70的数据
  /*   BookModel.find({ $and: [{ price: { $gt: 30 } }, { price: { $lt: 70 } }] })
    .then((data) => {
      console.log("查询成功", data);
    })
    .catch((err) => {
      console.log("查询失败", err);
    }); */

  // 正则表达式，搜索数据名称中带有 三 的书籍
  /*   BookModel.find({ name: /三/ })
    .then((data) => {
      console.log("查询成功", data);
    })
    .catch((err) => {
      console.log("查询失败", err);
    }); */
  // 正则匹配 new RegExp("data ") data:可以为变量
  BookModel.find({ name: new RegExp("三") })
    .then((data) => {
      console.log("查询成功", data);
    })
    .catch((err) => {
      console.log("查询失败", err);
    });
});

// 设置连接错误的回调
mongoose.connection.on("error", () => {
  console.log("连接失败");
});

//设置连接关闭的回调
mongoose.connection.on("close", () => {
  console.log("连接关闭");
});
